Дома у Витека
было 2 одинаковых набора кубиков из английских букв, но во время очередной
уборки один из кубиков затерялся. Помогите Витеку определить, какой же из
кубиков отсутствует в одном из наборов.
Вход. В первой строке
задано количество найденных Витеком кубиков n
(1 ≤ n ≤ 105),
а во второй строке n символов,
изображённых на каждом из кубиков.
Выход. Выведите букву, изображённую на потерявшемся
кубике, либо сообщение "Ok", если Витек ошибся и ни один из кубиков
не потерялся.
Пример входа |
Пример выхода |
5 abcac |
b |
РЕШЕНИЕ
математика – XOR
Анализ
алгоритма
Совершим операцию xor для всех кубиков. Если ни один из
кубиков не потерялся, то результат будет равен нулю. Иначе результатом будет
потерянный кубик.
Реализация
алгоритма
Читаем входные данные. Объявим переменную res типа char. Вычислим в ней операцию
xor для всех кубиков.
scanf("%d\n",&n);
res = 0;
for(i = 0; i < n; i++)
{
scanf("%c",&ch);
res ^= ch;
}
В зависимости от значения res
выводим ответ.
if (!res) printf("Ok\n");
else printf("%c\n",res);
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
String s = con.next();
char res = 0;
for(int i = 0; i < n; i++)
res ^= s.charAt(i);
if (res == 0)
System.out.println("Ok");
else
System.out.printf("%c\n",res);
con.close();
}
}
Java реализация – символьный массив
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
char s[] = con.next().toCharArray();
int res = 0;
for(int i = 0; i < n; i++)
res ^= s[i];
if (res == 0)
System.out.println("Ok");
else
System.out.printf("%c\n",res);
con.close();
}
}